/**
 * 集合
 *
 * 描述
 * 给你两个集合，要求{A} + {B}。 注：同一个集合中不会有两个相同的元素。输出时按数字升序输出。
 *
 * 数据范围：
 * 1≤n,m≤10000 ，集
 * 合中的元素满足
 * 1≤val≤10^5
 *
 * 输入描述：
 * 每组输入数据分为三行,第一行有两个数字n,m，分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。
 * 每个元素为不超过int范围的整数,每个元素之间有个空格隔开。
 *
 * 输出描述：
 * 针对每组数据输出一行数据，表示合并后的集合，要求从小到大输出，每个元素之间有一个空格隔开,行末无空格。
 */

import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

/**
 * 这里我偷懒使用 set 了, TreeSet 内置是可以使用 comparator 进行排序的
 * 时间复杂度 : O(n)
 * 空间复杂度 : O(n)
 */

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int n = in.nextInt(), m = in.nextInt();

        // TreeSet 内置从小到大的排序
        Set<Integer> hash = new TreeSet<>((a, b) -> a - b);
        for (int i = 0; i < n + m; i++) {
            int x = in.nextInt();
            hash.add(x);
        }

        // 打印
        hash.forEach(x -> System.out.print(x + " "));
    }
}